import 'package:enjoy_plus/utils/http.dart';
import 'package:enjoy_plus/utils/toast.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter_html/flutter_html.dart';
import 'package:geolocator/geolocator.dart';
import 'package:permission_handler/permission_handler.dart';

class LocationList extends StatefulWidget {
  const LocationList({super.key});

  @override
  State<LocationList> createState() => _LocationListState();
}

class _LocationListState extends State<LocationList> {

   // 逆地理编码地址结果
String address = '';
//周边小区
List nearbyCommunity = [];


  @override
  void initState() {
    super.initState();
    requestLocationPermission();

    _reverseGeocoding(113.950203,22.540648);
    _getNearbyCommunity(113.950203,22.540648);
  }
   requestLocationPermission()async{
    PermissionStatus status = await Permission.location.request();
    if (status.isGranted) {
     // 权限未授予
      ToastUtil.showSuccess('位置权限成功');
      getCurrentLocation();
    } else {
      // 权限未授予
      ToastUtil.showError('位置权限未授予, 请去设置中心开启');
    }
  }
  /**
 * 异步获取当前设备的位置信息。
 * 
 * 此方法首先根据设备的平台（Android、iOS/macOS 或 Web）配置不同的定位设置，
 * 然后使用这些设置获取设备的当前位置，并处理位置信息或异常。
 */
Future<void> getCurrentLocation() async {

  late LocationSettings locationSettings;

  if (defaultTargetPlatform == TargetPlatform.android) {
    // 针对Android平台，设置高精度定位、100米距离过滤、强制使用位置管理器等
    locationSettings = AndroidSettings(
        accuracy: LocationAccuracy.high,
        distanceFilter: 100,
        forceLocationManager: true,
        intervalDuration: const Duration(seconds: 10),
        foregroundNotificationConfig: const ForegroundNotificationConfig(
          notificationText: "Example app will continue to receive your location even when you aren't using it",
          notificationTitle: "Running in Background",
          enableWakeLock: true,
        ));
  } else if (defaultTargetPlatform == TargetPlatform.iOS || defaultTargetPlatform == TargetPlatform.macOS) {
    // 针对iOS和macOS平台，设置高精度定位、健身活动类型、100米距离过滤等
    locationSettings = AppleSettings(
      accuracy: LocationAccuracy.high,
      activityType: ActivityType.fitness,
      distanceFilter: 100,
      pauseLocationUpdatesAutomatically: true,
      // 只有在应用在后台启动时才设置为true
      showBackgroundLocationIndicator: false,
    );
  } else if (kIsWeb) {
    // 针对Web环境，设置高精度定位、100米距离过滤、5分钟的最大年龄等
    locationSettings = WebSettings(
      accuracy: LocationAccuracy.high,
      distanceFilter: 100,
      maximumAge: const Duration(minutes: 5),
    );
  } else {
    // 对于其他平台，默认设置高精度定位和100米距离过滤
    locationSettings = const LocationSettings(
      accuracy: LocationAccuracy.high,
      distanceFilter: 100,
    );
  }

  try {
    // 使用配置好的定位设置获取当前位置
    Position position = await Geolocator.getCurrentPosition(locationSettings: locationSettings);
    // 显示成功获取到的纬度和经度
    ToastUtil.showSuccess('${position.latitude}, ${position.longitude}');
  } catch (e) {
    // 处理可能出现的异常
    print(e.toString());
  }
}
 
 //逆地理解析


// 逆地理编码
Future<void> _reverseGeocoding(double longitude, double latitude) async {
  try {
    var res = await http.get(
      'https://restapi.amap.com/v3/geocode/regeo?key=11304c7b18c70d240790998b7f88a090&location=$longitude,$latitude'
    );
    // final response = await http.get(
    //   // 逆地理编码 API 服务地址
    //   'https://restapi.amap.com/v3/geocode/regeo',
    //   // 请求参数
    //   params: {
    //     // 高德地图官网开发者控制台申请的密钥
    //     'key': '11304c7b18c70d240790998b7f88a090',
    //     // 经度在前，纬度在后，经纬度间以“,”分割
    //     'location': '$longitude,$latitude',
    //     // 搜索半径
    //     'radius': 500,
    //     // 搜索类型
    //     'type': '住宅小区'
    //   },
    // );
    //ToastUtil.showSuccess(response);
    // 更新地址信息
    setState(() {
      address = res['regeocode']['formatted_address'];
    });
    print(res);
  } catch (e) {
    print('_reverseGeocoding 逆地理编码 error');
    print(e);
  }
}
 //获取附近的小区
  Future<void> _getNearbyCommunity(double longitude, double latitude) async {
    try{
      var res = await http.get(
        'https://restapi.amap.com/v3/place/around?key=11304c7b18c70d240790998b7f88a090&location=$longitude,$latitude&keywords=住宅小区&types=住宅小区&radius=5000&page=1&extensions=base'
      );
      setState(() {
        nearbyCommunity = res['pois'];
      });
    }catch(e){
      print(e);
    }
  }
//构建小区列表
  List<Widget> _buildCommunityItem(List community){
    List<Widget> temp = [];
    for(var item in community){
      temp.add(
        GestureDetector(
          onTap:(){
            Navigator.pushNamed(context,'/building_list',arguments:{
              'point':item['name']
            } );
          },
          child: Container(
        color:Colors.white,
        padding:const EdgeInsets.all(10),
        child: Row(children:[
          Expanded(child: Text('${item['name']}')),
          Row(children: [
            Icon(Icons.arrow_forward_ios,
                            size: 16, color: Colors.black),
          ],)
        ])
      ),
        )
      );
    }
    return temp;
  }
 
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('选择社区'),
      ),
      body: ListView(
        padding: const EdgeInsets.all(10),
        children: [
          const Row(
            children: [
              Text(
                '当前地址',
                style: TextStyle(color: Colors.grey),
              )
            ],
          ),
          const SizedBox(height: 10),
          Container(
            color: Colors.white,
            padding: const EdgeInsets.all(10),
            child: Row(
              children: [
                Expanded(child: Text(address)),
                GestureDetector(
                  onTap:(){
                    _reverseGeocoding(113.950203,22.540648);
                  },
                  child:Row(
                  children: [
                    Icon(Icons.location_searching_outlined, color: Colors.blue),
                    SizedBox(width: 2),
                    Text(
                      '重新定位',
                      style: TextStyle(color: Colors.blue),
                    ),
                  
                  ],
                )
                )
              ],
            ),
          ),
          const SizedBox(height: 10),
          const Row(
            children: [
              Text(
                '附近社区',
                style: TextStyle(color: Colors.grey),
              )
            ],
          ),
          const SizedBox(height: 10),
          ListView(
            shrinkWrap: true,
            physics: const NeverScrollableScrollPhysics(),
            children: _buildCommunityItem(nearbyCommunity)
          )
        ],
      ),
    );
  }
}